#include <stdio.h>
#include <stdbool.h>
#include <assert.h>

typedef int HDataType;

typedef struct Heap
{
	HDataType* data;  //指针形式，为了动态扩容
	int size;
	int capacity;
}Hp;

//堆的一些接口函数
void HeapInit(Hp* p);  //初始化堆

void HeapDestroy(Hp* p);  //销毁堆

void HeapShow(Hp* p);  //打印堆中数据

void HeapPush(Hp* p, HDataType x);  //堆的插入

void HeapPop(Hp* p);  //堆的删除

bool HeapEmpty(Hp* p);  //堆的判空

HDataType HeapTop(Hp* p);  //返回堆顶元素

int HeapSize(Hp* p);  //堆中数据的个数

void BigAdjustDown(Hp* p, int parent, int size);  //大根堆向下调整
//同理，也存在小根堆的向下调整

void BigAdjustUp(Hp* p, int child);  //大根堆向上调整
//存在小根堆的向上调整